# LOAD LIBRARIES
import pandas as pd, numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
# LOAD TRAIN DATA AND MERGE TARGETS ONTO FEATURES
#df = pd.read_csv('./amex-default-prediction/train_data.csv', nrows=100_0000)
#df.S_2 = pd.to_datetime(df.S_2)
#df2 = pd.read_csv('./amex-default-prediction/train_labels.csv')
df = pd.read_parquet('./amex-parquet/train.parquet')
df.S_2 = pd.to_datetime(df.S_2)
df2 = pd.read_csv('./amex-default-prediction/train_labels.csv')
df = df.merge(df2,on='customer_ID',how='left')
def plot_time_series(prefix='D', cols=None, display_ct=32):
# DETERMINE WHICH COLUMNS TO PLOT
if cols is not None and len(cols)==0: cols = None
if cols is None:
COLS = df.columns[2:-1]
COLS = np.sort( [int(x[2:]) for x in COLS if x[0]==prefix] )
COLS = [f'{prefix}_{x}' for x in COLS]
print('#'*25)
print(f'Plotting all {len(COLS)} columns with prefix {prefix}')
print('#'*25)
else:
COLS = [f'{prefix}_{x}' for x in cols]
print('#'*25)
print(f'Plotting {len(COLS)} columns with prefix {prefix}')
print('#'*25)
# ITERATE COLUMNS
for c in COLS:
# CONVERT DATAFRAME INTO SERIES WITH COLUMN
tmp = df[['customer_ID','S_2',c,'target']].copy()
tmp2 = tmp.groupby(['customer_ID','target'])[['S_2',c]].agg(list).reset_index()
tmp3 = tmp2.loc[tmp2.target==1]
tmp4 = tmp2.loc[tmp2.target==0]
# FORMAT PLOT
spec = gridspec.GridSpec(ncols=2, nrows=1,
width_ratios=[3, 1], wspace=0.1,
hspace=0.5, height_ratios=[1])
fig = plt.figure(figsize=(20,10))
ax0 = fig.add_subplot(spec[0])
# PLOT 32 DEFAULT CUSTOMERS AND 32 NON-DEFAULT CUSTOMERS
t0 = []; t1 = []
for k in range(display_ct):
try:
# PLOT DEFAULTING CUSTOMERS
row = tmp3.iloc[k]
ax0.plot(row.S_2,row[c],'-o',color='blue')
t1 += row[c]
# PLOT NON-DEFAULT CUSTOMERS
row = tmp4.iloc[k]
ax0.plot(row.S_2,row[c],'-o',color='orange')
t0 += row[c]
except:
pass
plt.title(f'Feature {c} (Key: BLUE=DEFAULT, orange=no default)',size=18)
# PLOT HISTOGRAMS
ax1 = fig.add_subplot(spec[1])
try:
# COMPUTE BINS
t = t0+t1; mn = np.nanmin(t); mx = np.nanmax(t)
if mx==mn:
mx += 0.01; mn -= 0.01
bins = np.arange(mn,mx+(mx-mn)/20,(mx-mn)/20 )
# PLOT HISTOGRAMS
if np.sum(np.isnan(t1))!=len(t1):
ax1.hist(t1,bins=bins,orientation="horizontal",alpha = 0.8,color='blue')
if np.sum(np.isnan(t0))!=len(t0):
ax1.hist(t0,bins=bins,orientation="horizontal",alpha = 0.8,color='orange')
except:
pass
plt.show()
D_Feature_List = [48,54,55,58,61,62,74,75,77,80,115,118,119]
# S_Feature_List = All
# P_Feature_List = All
B_Feature_List = [1,3,4,7,9,19,20,23,28,33,37,40]
R_Feature_List = [9,10,26,27]
D_39 - 데이터 패턴 비슷, 0중심으로 분포
D_41 - 비파산 데이터 0에 쏠림, 파산 데이터 상대적으로 넓게 분포
D_42 - 결측치 많음, 패턴 안보임
D_43 - 비파산 0.25이하에 분포, 파산 데이터 더 넓게 분포
D_44 - 비파산 0에 대부분 분포, 파산 데이터 더 넓게 분포
D_45 - 비파산 녋게 층으로 분포, 파산 데이터 0.2 이하에 대부분 층으로 분포
D_46 - 중앙에 몰려 분포 패턴 안보임
D_47 - 대부분 층으로 분포, 비파산 데이터 상대적으로 낮은 값에 분포
D_48 - 파산데이터 상대적으로 높은값, 비파산데이터 상대적 낮은값에 분포
D_49 - 0중십 분포
D_50 - 파산 0 ~ 0.1에 대부분 분포, 비파산 데이터 더 넓게 분포
D_51 - 파산 0에 대부분 분포, 비파산 데이터 더 넓게 층으로 분포
D_52 - 두 데이터 모두 0.3이하에 대부분 분포
D_53 - 비파산데이터 0중심분포, 파산데이터 더 넓게 분포
D_54 - 비파산데이터 1에 집중분포, 파산제이터 1에 대부분 분포하나 0에도 소량 분포
D_55 - 파산데이터 상대적으로 높은값 고르게 분포, 비파산데이터 대부분 0.2이하 분포
D_56 - 결측치 많으나 파산데이터는 0.2이하에 분포
D_58 - 파산데이터 전체적으로 분포, 비파산 데이터 0에 집중적 분포
D_59 - 두 데이터 비슷한 패턴을 보임
D_60 - 비파산데이터 양 극단에 분포
D_61 - 파산데이터 0.9 부근에 집중분포, 비파산데이터 0.2이하에 집중분포
D_62 - 파산 0에 대부분 분포, 비파산 데이터 더 넓게 층으로 분포
D_63 - 데이터 0,3,4에 존재 3중심 분포
D_64 - 패턴 비슷
D_65 - 비파산데이터 0에 집중분포
D_66 - 1중심 분포
D_68 - 비파산데이터 6에 집중분포, 데이터패턴 비슷
D_69 - 비파산데이터 0에 집중분포
D_70 - 비파산 0에 대부분 분포, 파산 데이터 더 넓게 층으로 분포
D_71 - 두 데이터 모두 0.25이하에 대부분 분포
D_72 - 결측치 많음, 비파산데이터 0에 집중분포
D_73 - 결측치 많음, 패턴 안보임
D_74 - 파산데이터 전체적으로 층으로 분포, 비파산데이터 상대적 낮은값에 층으로 분포
D_75 - 파산데이터 전체적으로 층으로 분포, 비파산데이터 상대적 낮은값에 층으로 분포
D_76 - 결측치 많음, 패턴 안보임
D_77 - 파산데이터 상대적 낮은값에 층으로 분포, 비파산데이터 상대적 전체적으로 층으로 분포
D_78 - 파산데이터 전체적으로 분포, 비파산 데이터 0에 집중적 분포
D_79 - 두데이터 패턴 비슷
D_80 - 파산데이터 전체적으로 층으로 분포, 비파산데이터 상대적 낮은값에 층으로 분포
D_81 - 대부분 0에 분포 패턴 비슷
D_82 - 각 값 양극단 -1, 1에 분포 -1에 집중
D_83 - 대부분 0에 분포 패턴 비슷
D_84 - 대부분 0에 분포 패턴 비슷
D_86 - 대부분 0에 분포 패턴 비슷
D_87 - 1중심 분포
D_88 - 결측치 많음, 패턴 안보임
D_89 - 대부분 0에 분포 패턴 비슷
D_91 - 대부분 0에 분포 비파산데이터 다른 곳에도 약간 분포
D_92 - 각 값 양극단 0, 1에 분포, 0에 집중분포
D_93 - 대부분 0에 분포 패턴 비슷
D_94 - 대부분 0에 분포 패턴 비슷
D_96 - 0중심 분포
D_102 - 대부분 0에 분포 패턴 비슷
D_103 - 0, 1에 분포
D_104 - 각 값 양극단 0, 1에 분포
D_105 - 두데이터 패턴 비슷
D_106 - -1중심 분포
D_107 - 0.38정도, 1, 2정도에 분포
D_108 - -1 중심 분포
D_109 - 0에만 분포
D_110 - 결측치 많음, 패턴 안보임
D_111 - 1에만 분포
D_112 - 각 값 양극단 0, 1에 분포, 1에 상대적으로 더많이 분포
D_113 - 두데이터 패턴 비슷
D_114 - 0, 1에 분포, 1에 상대적으로 더많이 분포
D_115 - 비파산데이터 전체적으로 층으로 분포, 파산데이터 상대적 낮은값에 층으로 분포
D_116 - 0에 집중분포
D_117 - 두데이터 패턴 비슷
D_118 - 비파산데이터 전체적으로 층으로 분포, 파산데이터 상대적 낮은값에 층으로 분포
D_119 - 비파산데이터 전체적으로 층으로 분포, 파산데이터 상대적 낮은값에 층으로 분포 *
D_120 - 0, 1에 분포, 0에 상대적으로 더많이 분포
D_121 - 두데이터 패턴 비슷
D_122 - 두데이터 패턴 비슷
D_123 - 두데이터 패턴 비슷, 0에 집중분포
D_124 - 두데이터 패턴 비슷
D_125 - 두데이터 패턴 비슷, 0에 집중분포
D_126 - 두데이터 패턴 비슷, 2,1,0에 분포
D_127 - 두데이터 패턴 비슷, 0에 집중분포, 비파산데이터 1에도 분포
D_128 - 각 값 양극단 0, 1에 분포
D_129 - 각 값 0, 1에 분포
D_130 - 각 값 양극단 0, 1에 분포, 0에 상대적으로 더많이 분포
D_131 - 각 값 양극단 0, 1에 분포, 0에 상대적으로 더많이 분포
D_132 - 두데이터 패턴 비슷
D_133 - 두데이터 패턴 비슷, 0에 집중분포
D_134 - 결측치 많음, 패턴 안보임
D_135 - -1 중심분포
D_136 - -1 중심분포
D_137 - -1 중심준포
D_138 - -1 중심분포
D_139 - 0중심분포 -1,1에도 소량분포
D_140 - 0에 집중분포
D_141 - 두데이터 패턴 비슷, 0에 집중분포
D_142 - 결측치 많음, 패턴 비슷
D_143 - 각 데이터 0, 1에 분포, 0에 상대적으로 더많이 분포
D_144 - 두데이터 패턴 비슷, 0에 집중분포, 비파산데이터 다른값에도 소량 분포
D_145 - 두데이터 패턴 비슷, 0에 집중분포, 파산데이터 다른값에도 소량 분포
S_3 - 두데이터 패턴비슷
S_5 - 두데이터 패턴 비슷, 0에 집중분포
S_6 - 각 값 양극단 0, 1에 분포, 0에 상대적으로 더많이 분포
S_7 - 두데이터 패턴비슷
S_8 - 두데이터 패턴비슷
S_9 - 두데이터 패턴 비슷, 0에 집중분포
S_11 - 데이터 혼합양상
S_12 - 두데이터 패턴비슷
S_13 - 두데이터 패턴비슷
S_15 - 두데이터 패턴비슷
S_16 - 0에 집중분포
S_17 - 두데이터 패턴 비슷, 0에 집중분포
S_18 - 0중심 분포, 1에도 소량 분포
S_19 - 데이터 혼합양상
S_20 - 0에 집중분포
S_22 - 0에 집중분포
S_23 - 0에 집중분포
S_24 - 0에 집중분포
S_25 - 1에 집중분포, 파산데이터 낮은값에도 약간 분포
S_26 - 0에 집중분포, 비파산데이터 높은값에도 약간 분포
S_27 - 두데이터 패턴비슷
P_2 - 비파산데이터 상대적으로 높은값에 분포, 파산데이터 상대적으로 낮은값에 분포 *
P_3 - 두데이터 패턴비슷
P_4 - 두데이터 패턴 비슷, 0에 집중분포
B_1 - 0에 집중분포, 파산데이터 높은값에도 약간 분포
B_2 - 비파산데이터 1,0.8에 집중분포, 파산데이터 0에 집중분포
B_3 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
B_4 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
B_5 - 0에 집중분포, 비파산데이터 약간더 분포가 큼
B_6 - 0에 집중분포
B_7 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
B_8 - 각 값 양극단 0, 1에 분포
B_9 - 비파산데이터 0에 집중분포, 파산데이터 0.6 중심으로 분포가
B_10 - 0에 집중분포
B_11 - 0에 집중분포, 파산데이터 더 분포가 큼
B_11 - 0에 집중분포, 비파산데이터 더 분포가 큼
B_13 - 두데이터 패턴 비슷, 0에 집중분포
B_14 - 0에 집중분포, 파산데이터 더 분포가 큼
B_15 - 두데이터 패턴 비슷, 0에 집중분포
B_16 - 두데이터 패턴 비슷, 파산데이터 1에 집중분포 비사판데이터 0에 집중분포
B_17 - 두데이터 패턴 비슷, 1에 집중분포
B_18 - 비파산데이터 1에 집중분포, 파산데이터 낮은값에 상대적으로 더분포
B_19 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
B_20 - 두데이터 패턴 비슷, 파산데이터 1에 집중분포 비사판데이터 0에 집중분포
B_21 - 0에 집중분포
B_22 - 비파산데이터 0에 집중분포, 파산데이터 1 중심으로 분포
B_23 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
B_24 - 0에 집중분포
B_25 - 두데이터 패턴 비슷, 0에 집중분포
B_26 - 0에 집중분포
B_27 - 데이터 혼합양상
B_28 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
B_29 - 결측치 많음, 패턴 안보임
B_30 - 비파산데이터 0에 집중분포, 파산데이터 1 중심으로 분포
B_31 - 1에 집중분포
B_32 - 0에 집중분포, 파산데이터 1에도 약간존재
B_33 - 비파산데이터 1에 집중분포, 파산데이터 0에 집중분포
B_36 - 데이터 혼합양상
B_37 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
B_38 - 두데이터 패턴 비슷
B_39 - 결측치 많음, 패턴 안보임
B_40 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포 *
B_41 - 0에 집중분포, 파산데이터 1에도 약간존재
B_42 - 결측치 많음, 패턴 안보임
R_1 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
R_2 - 0에 집중분포, 파산데이터 1에도 약간존재
R_3 - 두데이터 패턴 비슷
R_4 - 두데이터 패턴 비슷, 0에 집중분포
R_5 - 0에 집중분포
R_6 - 0에 집중분포
R_7 - 0에 집중분포
R_8 - 0에 집중분포
R_9 - 비파산데이터 -1, 파산데이터 1중심 분포
R_10 - 비파산데이터 0에 집중분포, 파산데이터 전체적으로 분포
R_11 - 두데이터 패턴 비슷, 0에 집중분포
R_12 - 두데이터 패턴 비슷, 1에 집중분포
R_13 - 두데이터 패턴 비슷, 0~0.1에 집중분포
R_14 - 두데이터 패턴 비슷, 0에 집중분포
R_15 - 두데이터 패턴 비슷, 0에 집중분포
R_16 - 두데이터 패턴 비슷, 0에 집중분포
R_17 - 두데이터 패턴 비슷, 0~0.1에 집중분포
R_18 - 0중심 분포
R_19 - 0에 집중분포, 파산데이터 1에도 약간존재
R_20 - 0에 집중분포, 파산데이터 1,2,3에도 소량존재
R_21 - 0에 집중분포
R_22 - 0에 집중분포
R_23 - 0에 집중분포
R_24 - 0에 집중분포
R_25 - 0에 집중분포
R_26 - 비파산데이터 0에 분포, 파산데이터 전체적으로 분포
R_27 - 비파산데이터 1에 분포, 파산데이터 0에 분포
R_28 - 0에 집중분포
plot_time_series('D',D_Feature_List)
######################### Plotting 13 columns with prefix D #########################
plot_time_series('S')
######################### Plotting all 21 columns with prefix S #########################
plot_time_series('P')
######################### Plotting all 3 columns with prefix P #########################
plot_time_series('B',B_Feature_List)
######################### Plotting 12 columns with prefix B #########################
plot_time_series('R',R_Feature_List)
######################### Plotting 4 columns with prefix R #########################